Avastage loomuliku keeletöötluse pĂ”himĂ”isteid meie pĂ”hjaliku juhendiga N-grammi keelemudelite nullist rakendamiseks. Ăppige teooriat, koodi ja praktilisi rakendusi.
NLP aluste ehitamine: pÔhjalik sukeldumine N-grammi keelemudeli rakendamisse
Tehisintellekti domineeritud ajastul, alates nutikatest assistentidest meie taskutes kuni keerukate algoritmideni, mis toetavad otsingumootoreid, on keelemudelid nĂ€htamatud mootorid, mis paljusid neist uuendustest kĂ€ivitavad. Need on pĂ”hjus, miks teie telefon suudab ennustada jĂ€rgmist sĂ”na, mida soovite trĂŒkkida, ja kuidas tĂ”lketeenused saavad sujuvalt ĂŒhte keelt teise teisendada. Kuid kuidas need mudelid tegelikult töötavad? Enne keerukate nĂ€rvivĂ”rkude, nagu GPT, esilekerkimist ehitati arvutilingvistika vundament kaunilt lihtsale, kuid vĂ”imsale statistilisele lĂ€henemisviisile: N-grammi mudel.
See pĂ”hjalik juhend on mĂ”eldud andmeteadlastele, tarkvarainseneridele ja uudishimulikele tehnikahuvilistele ĂŒle kogu maailma. Me rĂ€ndame tagasi juurte juurde, demĂŒstifitseerides N-grammi keelemudelite teooriat ja pakkudes praktilist, samm-sammult juhendit, kuidas seda nullist ĂŒles ehitada. N-grammide mĂ”istmine ei ole lihtsalt ajalootund; see on oluline samm tugeva vundamendi loomisel loomuliku keeletöötluse (NLP) valdkonnas.
Mis on keelemudel?
PĂ”himĂ”tteliselt on keelemudel (LM) tĂ”enĂ€osusjaotus sĂ”nade jada ĂŒle. Lihtsamalt öeldes on selle peamine ĂŒlesanne vastata pĂ”hikĂŒsimusele: Arvestades sĂ”nade jada, milline on kĂ”ige tĂ”enĂ€olisem jĂ€rgmine sĂ”na?
MĂ”elge lausele: "Ăpilased avasid oma ___."
HĂ€sti treenitud keelemudel omistaks suure tĂ”enĂ€osuse sĂ”nadele nagu "raamatud", "sĂŒlearvutid" vĂ”i "mĂ”tted" ning ÀÀrmiselt madala, peaaegu nullilĂ€hedase tĂ”enĂ€osuse sĂ”nadele nagu "fotosĂŒntees", "elevandid" vĂ”i "maantee". SĂ”najadade tĂ”enĂ€osuse kvantifitseerimise abil vĂ”imaldavad keelemudelid masinatel inimkeelt sidusalt mĂ”ista, genereerida ja töödelda.
Nende rakendused on laialdased ja integreeritud meie igapÀevasesse digitaalsesse ellu, sealhulgas:
- MasintÔlge: Tagab, et vÀljundlause on sihtkeeles sujuv ja grammatiliselt korrektne.
- KÔnetuvastus: Eristab foneetiliselt sarnaseid fraase (nt "recognize speech" vs. "wreck a nice beach").
- Ennustav tekst ja automaatne lÔpetamine: Soovitab jÀrgmist sÔna vÔi fraasi tippimise ajal.
- Ăigekirja ja grammatika parandus: Tuvastab ja mĂ€rgistab sĂ”najadasid, mis on statistiliselt ebatĂ”enĂ€olised.
Tutvustame N-gramme: PÔhimÔiste
N-gramm on lihtsalt 'n' ĂŒksuse pidev jada antud tekstiproovist vĂ”i kĂ”nest. 'Ăksused' on tavaliselt sĂ”nad, kuid need vĂ”ivad olla ka tĂ€hed, silbid vĂ”i isegi foneemid. 'n' N-grammis tĂ€histab numbrit, mis viib konkreetsete nimedeni:
- Unigramm (n=1): Ăksik sĂ”na. (nt "The", "quick", "brown", "fox")
- Bigramm (n=2): Kahe sÔna jada. (nt "The quick", "quick brown", "brown fox")
- Trigramm (n=3): Kolme sÔna jada. (nt "The quick brown", "quick brown fox")
N-grammi keelemudeli pĂ”hiline idee on see, et me saame ennustada jĂ€rgmist sĂ”na jadas, vaadates 'n-1' sĂ”na, mis sellele eelnesid. Selle asemel, et pĂŒĂŒda mĂ”ista lause tĂ€ielikku grammatilist ja semantilist keerukust, teeme lihtsustava eelduse, mis vĂ€hendab dramaatiliselt probleemi raskusastet.
N-grammide matemaatika: TÔenÀosus ja lihtsustamine
Lause (sĂ”nade jada W = wâ, wâ, ..., wâ) tĂ”enĂ€osuse ametlikuks arvutamiseks saame kasutada tĂ”enĂ€osuse ahelreeglit:
P(W) = P(wâ) * P(wâ|wâ) * P(wâ|wâ, wâ) * ... * P(wâ|wâ, ..., wâââ)
See valem vÀidab, et kogu jada tÔenÀosus on iga sÔna tingimuslike tÔenÀosuste korrutis, arvestades kÔiki sÔnu, mis sellele eelnesid. Kuigi matemaatiliselt on see usaldusvÀÀrne, on see lÀhenemisviis ebapraktiline. SÔna tÔenÀosuse arvutamine, arvestades pikka eelnevate sÔnade ajalugu (nt P(sÔna | "The quick brown fox jumps over the lazy dog and then...")), nÔuaks usaldusvÀÀrse hinnangu andmiseks uskumatult suurt hulka tekstilisi andmeid, et leida piisavalt nÀiteid.
Markovi eeldus: Praktiline lihtsustamine
Siin tutvustavad N-grammi mudelid oma kÔige olulisemat kontseptsiooni: Markovi eeldus. See eeldus vÀidab, et sÔna tÔenÀosus sÔltub ainult kindlast arvust eelmistest sÔnadest. Me eeldame, et vahetu kontekst on piisav ja me saame kaugema ajaloo kÔrvale jÀtta.
- Bigrammi mudeli (n=2) puhul eeldame, et sĂ”na tĂ”enĂ€osus sĂ”ltub ainult ĂŒhest eelnevast sĂ”nast:
P(wᔹ | wâ, ..., wᔹââ) â P(wᔹ | wᔹââ) - Trigrammi mudeli (n=3) puhul eeldame, et see sĂ”ltub kahest eelnevast sĂ”nast:
P(wᔹ | wâ, ..., wᔹââ) â P(wᔹ | wᔹââ, wᔹââ)
See eeldus muudab probleemi arvutuslikult juhitavaks. Me ei pea enam nÀgema sÔna tÀpset tÀielikku ajalugu, et arvutada selle tÔenÀosust, vaid ainult viimast n-1 sÔna.
N-grammi tÔenÀosuste arvutamine
Kuidas me Markovi eelduse korral neid lihtsustatud tÔenÀosusi arvutame? Me kasutame meetodit nimega Maksimaalse tÔepÀra hinnang (MLE), mis on uhke viis öelda, et me saame tÔenÀosused otse oma treeningteksti (korpus) loendustest.
Bigrammi mudeli puhul arvutatakse sĂ”na wᔹ tĂ”enĂ€osus, mis jĂ€rgneb sĂ”nale wᔹââ, jĂ€rgmiselt:
P(wᔹ | wᔹââ) = Count(wᔹââ, wᔹ) / Count(wᔹââ)
SÔnades: SÔna B nÀgemise tÔenÀosus pÀrast sÔna A on arv kordi, kui me nÀgime paari "A B", jagatuna kordade arvuga, kui me nÀgime sÔna "A" kokku.
Kasutame nÀitena pisikest korpust: "The cat sat. The dog sat."
- Count("The") = 2
- Count("cat") = 1
- Count("dog") = 1
- Count("sat") = 2
- Count("The cat") = 1
- Count("The dog") = 1
- Count("cat sat") = 1
- Count("dog sat") = 1
Mis on "cat" tÔenÀosus pÀrast "The"?
P("cat" | "The") = Count("The cat") / Count("The") = 1 / 2 = 0,5
Mis on "sat" tÔenÀosus pÀrast "cat"?
P("sat" | "cat") = Count("cat sat") / Count("cat") = 1 / 1 = 1,0
Samm-sammult nullist rakendamine
NĂŒĂŒd tĂ”lgime selle teooria praktiliseks rakenduseks. Me visandame sammud keeleagnostilisel viisil, kuigi loogika vastendub otse keeltega, nagu Python.
1. samm: Andmete eeltöötlus ja tokeniseerimine
Enne kui saame midagi loendada, peame oma tekstikorpus ette valmistama. See on kriitiline samm, mis kujundab meie mudeli kvaliteeti.
- Tokeniseerimine: Protsess, mille kĂ€igus jagatakse tekstikogum vĂ€iksemateks ĂŒksusteks, mida nimetatakse tokeniteks (meie puhul sĂ”nad). NĂ€iteks "The cat sat." muutub kujule ["The", "cat", "sat", "."].
- VÀiketÀhtedeks teisendamine: On tavapÀrane praktika teisendada kogu tekst vÀiketÀhtedeks. See takistab mudelil kohtlemast "The" ja "the" kui kahte erinevat sÔna, mis aitab meie loendusi koondada ja muuta mudeli vastupidavamaks.
- Algus- ja lĂ”putokenite lisamine: See on ĂŒlioluline tehnika. Me lisame iga lause algusesse ja lĂ”ppu spetsiaalseid tokeneid, nagu <s> (algus) ja </s> (lĂ”pp). Miks? See vĂ”imaldab mudelil arvutada sĂ”na tĂ”enĂ€osust lause alguses (nt P("The" | <s>)) ja aitab mÀÀratleda terve lause tĂ”enĂ€osust. Meie nĂ€itelause "the cat sat." muutuks kujule ["<s>", "the", "cat", "sat", ".", "</s>"].
2. samm: N-grammide loendamine
Kui meil on iga lause jaoks puhas tokenite loend, itereerime lÀbi oma korpuse, et saada loendused. Parim andmestruktuur selle jaoks on sÔnastik vÔi rÀsitabel, kus vÔtmed on N-grammid (esitatud tuple'itena) ja vÀÀrtused on nende sagedused.
Bigrammi mudeli puhul vajame kahte sÔnastikku:
unigram_counts: Salvestab iga ĂŒksiku sĂ”na sageduse.bigram_counts: Salvestab iga kahesĂ”nalise jada sageduse.
Te itereeriksite lÀbi oma tokeniseeritud laused. Lausesarnase lause ["<s>", "the", "cat", "sat", "</s>"] puhul teeksite jÀrgmist:
- Suurendage unigrammide loendust: "<s>", "the", "cat", "sat", "</s>".
- Suurendage bigrammide loendust: ("<s>", "the"), ("the", "cat"), ("cat", "sat"), ("sat", "</s>").
3. samm: TÔenÀosuste arvutamine
Kui meie loendussĂ”nastikud on tĂ€idetud, saame nĂŒĂŒd ehitada tĂ”enĂ€osusmudeli. Me saame neid tĂ”enĂ€osusi salvestada teise sĂ”nastikku vĂ”i arvutada neid lennult.
P(wordâ | wordâ) arvutamiseks peaksite hankima bigram_counts[(wordâ, wordâ)] ja unigram_counts[wordâ] ning tegema jagamise. Hea tava on eelnevalt arvutada kĂ”ik vĂ”imalikud tĂ”enĂ€osused ja salvestada need kiireks otsimiseks.
4. samm: Teksti genereerimine (lÔbus rakendus)
SuurepÀrane viis oma mudeli testimiseks on lasta sellel genereerida uut teksti. Protsess toimib jÀrgmiselt:
- Alustage esialgse kontekstiga, nÀiteks algustokeniga <s>.
- Otsige ĂŒles kĂ”ik bigrammid, mis algavad <s> ja nende seotud tĂ”enĂ€osused.
- Valige jÀrgmine sÔna juhuslikult selle tÔenÀosusjaotuse alusel (kÔrgemate tÔenÀosustega sÔnad valitakse tÔenÀolisemalt).
- VĂ€rskendage oma konteksti. Ăsja valitud sĂ”nast saab jĂ€rgmise bigrammi esimene osa.
- Korrake seda protsessi, kuni genereerite lÔputokeni </s> vÔi saavutate soovitud pikkuse.
Lihtsa N-grammi mudeli genereeritud tekst ei pruugi olla tĂ€iesti sidus, kuid see toodab sageli grammatiliselt usutavaid lĂŒhikesi lauseid, mis nĂ€itavad, et see on Ă”ppinud pĂ”hilisi sĂ”na-sĂ”na suhteid.
HÔreduse vÀljakutse ja lahendus: Silumine
Mis juhtub, kui meie mudel puutub testimise ajal kokku bigrammiga, mida ta treenimise ajal kunagi ei nÀinud? NÀiteks kui meie treeningkorpus ei sisaldanud kunagi fraasi "the purple dog", siis:
Count("the", "purple") = 0
See tĂ€hendab, et P("purple" | "the") oleks 0. Kui see bigramm on osa pikemast lausest, mida me pĂŒĂŒame hinnata, muutub kogu lause tĂ”enĂ€osus nulliks, sest me korrutame kĂ”ik tĂ”enĂ€osused kokku. See on null-tĂ”enĂ€osuse probleem, andmete hĂ”reduse ilming. On ebareaalne eeldada, et meie treeningkorpus sisaldab kĂ”iki vĂ”imalikke kehtivaid sĂ”nakombinatsioone.
Selle lahendus on silumine. Silumise pĂ”hiline idee on vĂ”tta vĂ€ike kogus tĂ”enĂ€osusmassi N-grammidelt, mida oleme nĂ€inud, ja jaotada see N-grammidele, mida me kunagi ei ole nĂ€inud. See tagab, et ĂŒhelgi sĂ”najadal ei ole tĂ€pselt nullist erinevat tĂ”enĂ€osust.
Laplace'i (lisa-ĂŒks) silumine
Lihtsaim silumistehnika on Laplace'i silumine, tuntud ka kui lisa-ĂŒks silumine. Idee on uskumatult intuitiivne: teeselda, et oleme nĂ€inud iga vĂ”imalikku N-grammi ĂŒks kord rohkem, kui me tegelikult tegime.
Valem tÔenÀosuse jaoks muutub veidi. Me lisame lugeja loendusele 1. Veendumaks, et tÔenÀosused summeeruvad endiselt 1-ni, lisame nimetajale kogu sÔnavara suuruse (V).
P_laplace(wᔹ | wᔹââ) = (Count(wᔹââ, wᔹ) + 1) / (Count(wᔹââ) + V)
- Plussid: VÀga lihtne rakendada ja tagab, et nulltÔenÀosusi ei ole.
- Miinused: See annab sageli liiga palju tĂ”enĂ€osust nĂ€htamatutele sĂŒndmustele, eriti suurte sĂ”navarade puhul. Sel pĂ”hjusel toimib see praktikas sageli kehvalt vĂ”rreldes keerukamate meetoditega.
Lisa-k silumine
VĂ€ike parandus on Lisa-k silumine, kus 1 lisamise asemel lisame vĂ€ikese murdarvulise vÀÀrtuse 'k' (nt 0,01). See leevendab liiga suure tĂ”enĂ€osusmassi ĂŒmberjaotamise mĂ”ju.
P_add_k(wᔹ | wᔹââ) = (Count(wᔹââ, wᔹ) + k) / (Count(wᔹââ) + k*V)
Kuigi parem kui lisa-ĂŒks, vĂ”ib optimaalse 'k' leidmine olla vĂ€ljakutse. Keerukamad tehnikad, nagu Good-Turingi silumine ja Kneser-Ney silumine, on olemas ja on standardsed paljudes NLP tööriistakomplektides, pakkudes palju keerukamaid viise nĂ€htamatute sĂŒndmuste tĂ”enĂ€osuse hindamiseks.
Keelemudeli hindamine: Perpleksus
Kuidas me teame, kas meie N-grammi mudel on hea? VĂ”i kas trigrammi mudel on meie konkreetse ĂŒlesande jaoks parem kui bigrammi mudel? Me vajame hindamiseks kvantitatiivset mÔÔdikut. KĂ”ige tavalisem mÔÔdik keelemudelite jaoks on perpleksus.
Perpleksus on mÔÔdik selle kohta, kui hĂ€sti tĂ”enĂ€osusmudel ennustab valimit. Intuitiivselt vĂ”ib seda pidada mudeli kaalutud keskmiseks hargnemisfaktoriks. Kui mudeli perpleksus on 50, tĂ€hendab see, et iga sĂ”na puhul on mudel sama segaduses, kui tal tuleks valida ĂŒhtlaselt ja sĂ”ltumatult 50 erineva sĂ”na hulgast.
Madalam perpleksuse skoor on parem, kuna see nĂ€itab, et mudel on testandmete poolt vĂ€hem "ĂŒllatunud" ja omistab tegelikult nĂ€htavatele jadadele suuremaid tĂ”enĂ€osusi.
Perpleksus arvutatakse testikomplekti pöördtÔenÀosusena, normaliseerituna sÔnade arvuga. Lihtsama arvutuse jaoks esitatakse seda sageli logaritmilisel kujul. Hea ennustusvÔimega mudel omistab testlausetele kÔrged tÔenÀosused, mille tulemuseks on madal perpleksus.
N-grammi mudelite piirangud
Vaatamata nende pÔhilisele tÀhtsusele on N-grammi mudelitel olulisi piiranguid, mis on suunanud NLP valdkonna keerukamate arhitektuuride poole:
- Andmete hÔredus: Isegi silumise korral plahvatab suurema N (trigrammid, 4-grammid jne) puhul vÔimalike sÔnakombinatsioonide arv. Enamiku neist jaoks muutub usaldusvÀÀrsete tÔenÀosuste hindamiseks piisavalt andmete olemasolu vÔimatuks.
- Salvestusruum: Mudel koosneb kÔigist N-grammi loendustest. Kui sÔnavara ja N kasvavad, vÔib nende loenduste salvestamiseks vajalik mÀlu muutuda tohutuks.
- VĂ”imetus tabada pikaajalisi sĂ”ltuvusi: See on nende kĂ”ige kriitilisem viga. N-grammi mudelil on vĂ€ga piiratud mĂ€lu. NĂ€iteks ei saa trigrammi mudel ĂŒhendada sĂ”na teise sĂ”naga, mis ilmus rohkem kui kaks positsiooni enne seda. MĂ”elge sellele lausele: "The author, who wrote several best-selling novels and lived for decades in a small town in a remote country, speaks fluent ___." Trigrammi mudel, mis ĂŒritab ennustada viimast sĂ”na, nĂ€eb ainult konteksti "speaks fluent". Tal ei ole teadmisi sĂ”nast "author" vĂ”i asukohast, mis on olulised vihjed. See ei suuda tabada kaugete sĂ”nade semantilist suhet.
Enamat kui N-grammid: NĂ€rvikeelemudelite koit
Need piirangud, eriti vĂ”imetus kĂ€sitleda pikaajalisi sĂ”ltuvusi, sillutasid teed nĂ€rvikeelemudelite arendamisele. Arhitektuurid, nagu rekurrentsed nĂ€rvivĂ”rgud (RNN), pikaajalise lĂŒhimĂ€lu vĂ”rgud (LSTM) ja eriti nĂŒĂŒd domineerivad Transformerid (mis toetavad mudeleid nagu BERT ja GPT), olid loodud nende konkreetsete probleemide ĂŒletamiseks.
HÔredate loenduste asemel Ôpivad nÀrvimudelid sÔnade tihedaid vektorite kujutisi (manused), mis tabavad semantilisi suhteid. Nad kasutavad sisemisi mÀlumehhanisme, et jÀlgida konteksti palju pikemate jadade jooksul, vÔimaldades neil mÔista inimkeeles peituvaid keerulisi ja pikaajalisi sÔltuvusi.
JĂ€reldus: NLP alus Sammas
Kuigi kaasaegses NLP-s domineerivad laiaulatuslikud nĂ€rvivĂ”rgud, jÀÀb N-grammi mudel asendamatuks Ă”ppetööriistaks ja ĂŒllatavalt tĂ”husaks baastasemeks paljude ĂŒlesannete jaoks. See pakub selge, tĂ”lgendatava ja arvutuslikult tĂ”husa sissejuhatuse keelemudeli pĂ”hivĂ€ljakutsesse: minevikust saadud statistiliste mustrite kasutamine tuleviku ennustamiseks.
Ehitades N-grammi mudeli nullist, saate sĂŒgava, esimese pĂ”himĂ”tte arusaama tĂ”enĂ€osusest, andmete hĂ”redusest, silumisest ja hindamisest NLP kontekstis. See teadmine ei ole lihtsalt ajalooline; see on kontseptuaalne aluskivi, millele on ehitatud kaasaegse tehisintellekti kĂ”rguvad pilvelĂ”hkujad. See Ă”petab teid mĂ”tlema keelele kui tĂ”enĂ€osuste jadale â perspektiiv, mis on oluline iga keelemudeli valdamiseks, olenemata sellest, kui keeruline see on.